package com.hk.controller;


import com.hk.entity.Admin;
import com.hk.entity.Result;
import com.hk.service.AdminService;
import com.hk.utils.JwtUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * 管理员表控制层
 */
@Slf4j
@RestController
@RequestMapping("/admin")
public class AdminController {
    @Autowired
    private AdminService adminService;

    /**
     * 查询管理员账号
     * @return
     */
    @GetMapping("/AllInfo")
    public Result queryAll(){
        List<Admin> adminList = adminService.queryAll();
        return Result.success(adminList);
    }

    /**
     * 增加管理员
     * @param admin
     * @return
     */
    @PostMapping("/addAdmin")
    public Result addAdmin(@RequestBody Admin admin){
        if (admin.getAdminId() == null) {
            throw new IllegalArgumentException("管理员编号不能为空");
        }
        log.info("增加管理员：admin:{}",admin);
        adminService.addAdmin(admin);
        return Result.success();
    }

    /**
     * 删除管理员 支持批量删除
     * @param ids
     * @return
     */
    @DeleteMapping("/{ids}")
    public Result deleteAdmin(@PathVariable List<Integer> ids) {
        // 这里假设只传入一个id值时，也要封装成列表形式，如 [12]
        if (ids == null || ids.size() == 0) {
            return Result.error("请传入要删除的管理员id列表");
        }
        log.info("删除管理员，：参数：{}", ids);
        adminService.deleteAdmin(ids);
        return Result.success();
    }

    /**
     * 根据ID查询管理员
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    public Result getById(@PathVariable Integer id){
        log.info("根据ID查询管理员：id: {}",id);
        Admin admin = adminService.getById(id);
        return Result.success(admin);
    }

    /**
     * 更新管理员信息
     * @param admin
     * @return
     */
    @PutMapping("/updata")
    public Result updataAdmin(@RequestBody Admin admin){
        log.info("更新管理员信息：{}",admin);
        adminService.updataAdmin(admin);
        return Result.success();
    }

    /**
     * 登录之后解析请求头展示个人信息
     * @param authorization
     * @return
     * @throws Exception
     */
    @GetMapping("/home")
    public Result getInfo(@RequestHeader("token") String authorization) throws Exception{
        // 从token头中提取JWT令牌
        String token = authorization;
        // 解析JWT令牌并提取管理员ID
        Map<String, Object> claims = JwtUtils.parseJWT(token);
        String adminId = (String) claims.get("adminId");
        Admin admin = adminService.HomeInfo(adminId);
        return Result.success(admin);
    }



}
